//----------------------------------------------------
// Titulo: Circuito multiplexador RGB
// Descricao: Alterna entre as cores de cada elemento grafico exibido na tela
// Versao: 1.0
// Autor: Joao Carlos Nunes Bittencourt
//
// Legenda:
// 	# -> Bug Fix
// 	+ -> Addition
// 	^ -> Change
// 	- -> Removed
// 	! -> Note
// Revisoes
// +[+2] Adicionadas as faixas centrais da pista.
// +[+1] Adicionadas as faixas verdes da pista.
//
// Testes:
//
//----------------------------------------------------

module multiplixador_rgb
//---------------------------------------
// Parametros das cores RGB
//---------------------------------------
// Definicao das cores no padrao RGB. Saida de 3 bits
	#(
		parameter [2:0]
			preto = 3'b000,
			azul = 3'b001,
			verde = 3'b010,
			ciano = 3'b011,
			vermelho = 3'b100,
			magenta = 3'b101,
			amarelo = 3'b110,
			branco = 3'b111
	)		
	( 
		input video_on,
		input gramado,
		input faixa_central,
		input zebra_base_red, zebra_base_white,
		input mostra_carro,
		input carro,
		input roda,
		output reg [2:0] grafico_rgb
	);
	
	always@*
	if(!video_on)
		grafico_rgb = preto; // fora da area de exibicao da tela
	else begin
		if(gramado) // gramado ao redor das pista
			grafico_rgb = verde;
		else if(faixa_central) // faixa de divisao da pista
			grafico_rgb = branco;
		else if(mostra_carro && carro)
			grafico_rgb = vermelho;
		else if(mostra_carro && roda)
			grafico_rgb = verde;
		else if(zebra_base_red)
			grafico_rgb = vermelho;
		else if(zebra_base_white)
			grafico_rgb = azul;
		else
			grafico_rgb = preto;			
	end
endmodule
